import router, { defaultRoutes, dynamicRoutes } from '../index'
import { getTokenStorage, removeTokenStorage } from '@/utils/app'
import store from '@/store'
router.addRoutes(dynamicRoutes)
router.beforeEach((to, from, next) => {
  if (to.path === '/login') {
    removeTokenStorage()
    store.commit('account/removeSystem')
    return next()
  }
  if (getTokenStorage()) {
    console.log(store.state.account.system)
    // 没有该系统可访问系统的数据 页面一旦刷新路由的options中的routes被重置
    if (store.state.account.system.length === 0) {
      store.dispatch('account/getSystem').then(() => {
        store.dispatch('account/createRoutes')
      }).then(() => {
        // 调用router实例的addRoutes方法 添加路由规则 参数是路由规则数组
        // 该方法是添加实际的路由
        console.log(store.state.account.addRoutes)
        router.addRoutes(store.state.account.addRoutes)
        // 该方法是修改我们定义的路由规则
        router.options.routes = [...defaultRoutes, ...store.state.account.addRoutes]
        // 重定向到要去的页面
        // 要从定向的原因： 页面刷新时路由配置对象重置， 当要进入到的不存在路由对象
        // 只会看到白皮 当执行完上列路由鉴权操作时， 才有需要跳转的路由对象配置
        // 所以重定向后to路由规则对象与实际的路由规则对象才能有对应
        next({ ...to, replace: true })
      })
    } else {
      // 有该用户可访问系统数据
      next()
    }
  } else {
    next('/login')
  }
})
